/**
  * @file		debug_uart.h
  * @brief		串口通信头文件，串口调试单片机时使用。
  * 	
  * @note		1.仅适用于STM32单片机，使用前需要在CubeMX中进行相关配置，生成工程需要勾选生成.h和.c文件。
  * 			2.检查UART_HANDLER与启用的配置是否相符。
  *				3.默认使用的是串口中断环形缓冲接收处理，需开启接收中断，
  *					想使用DMA传输时，配置需要开启DMA传输完成中断（开启DMA后CubeMX默认开启），用于接收数据，
  *					同时#define DEBUG_UART_DMA_PROCESS	(1)以便使用DMA传输处理函数。
  *	
  * @author 	FFerryman
  * @date		2025-7-19
  * @version 	1.0
  */
#ifndef __DEBUG_UART_H
#define __DEBUG_UART_H

#ifdef __cplusplus
extern "C" {
#endif

#include "usart.h"

/**
  * @brief	串口句柄DEBUG_UART_HANDLER，需要根据自己的配置进行修改。
  */
#define DEBUG_UART_HANDLER		(huart1)

/**
  * @brief	串口接收是否使用DMA进行数据传输配置。
  * @note	DEBUG_UART_DMA_ENABLE == 0时禁止DMA传输。
  *			DEBUG_UART_DMA_ENABLE == 1时启用DMA传输。
  */
#ifndef DEBUG_UART_DMA_ENABLE
#define DEBUG_UART_DMA_ENABLE	(0)
#endif

#if	DEBUG_UART_DMA_ENABLE
/**
  * @brief	串口DMA句柄DEBUG_UART_DMA_HANDLER，需要根据自己的配置进行修改。
  * @note	串口接收DMA句柄在定义处并未声明，故需在此声明，需据配置修改。
  */
extern  DMA_HandleTypeDef hdma_usart1_rx;
#define DEBUG_UART_DMA_HANDLER	(hdma_usart1_rx)
#endif

/**
  * @brief	数据环形缓冲接收数组长度。
  */
#define DEBUG_UART_RECEIVE_LENGTH		(10)
/**
  * @brief	中断接收长度,若一帧数据长度确定，直接更改此长度。
  */
#define DEBUG_UART_RECEIVE_IT_LENGTH	(1)

/**
  * @brief	存放接收数据的数组。
  */
extern  uint8_t receive_fifo_buffer[];
/**
  * @brief	接收完成标志位，可以用于处理数据。
  */
extern  uint8_t receive_finish_flag;

/**
  * @brief	函数声明。
  */
void debug_uart_init(void);
void debug_uart_print(const char* format, ...);
uint8_t uart_read_fifo_buffer(uint8_t *get_data, uint8_t *fifo_buffer, uint32_t len);
uint8_t uart_write_fifo_buffer(uint8_t *fifo_buffer, uint8_t *receive_data, uint32_t len);

#if DEBUG_UART_DMA_ENABLE
void debug_uart_dma_reievce(UART_HandleTypeDef *huart, uint16_t Size);
#else
void debug_uart_it_reievce(UART_HandleTypeDef *huart);
#endif // DEBUG_UART_DMA_ENABLE

#ifdef __cplusplus
}
#endif

#endif
